package com.atguigu.tingshu.album.service.impl;

import cn.hutool.core.bean.BeanUtil;
import com.atguigu.tingshu.album.mapper.AlbumAttributeValueMapper;
import com.atguigu.tingshu.album.mapper.AlbumInfoMapper;
import com.atguigu.tingshu.album.mapper.AlbumStatMapper;
import com.atguigu.tingshu.album.service.AlbumInfoService;
import com.atguigu.tingshu.common.constant.SystemConstant;
import com.atguigu.tingshu.common.util.AuthContextHolder;
import com.atguigu.tingshu.model.album.AlbumAttributeValue;
import com.atguigu.tingshu.model.album.AlbumInfo;
import com.atguigu.tingshu.model.album.AlbumStat;
import com.atguigu.tingshu.vo.album.AlbumAttributeValueVo;
import com.atguigu.tingshu.vo.album.AlbumInfoVo;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Slf4j
@Service
@SuppressWarnings({"all"})
public class AlbumInfoServiceImpl extends ServiceImpl<AlbumInfoMapper, AlbumInfo> implements AlbumInfoService {

    @Autowired
    private AlbumInfoMapper albumInfoMapper;

    @Autowired
    private AlbumAttributeValueMapper albumAttributeValueMapper;

    @Autowired
    private AlbumStatMapper albumStatMapper;

    @Override
    @Transactional(rollbackFor = Exception.class)
    public void saveAlbumInfo(AlbumInfoVo albumInfoVo) {

        Long userId = AuthContextHolder.getUserId();
        // 新增专辑信息，需要联动三张表：
        // 专辑信息表，专辑属性表，专辑统计表
        // 新增专辑信息表
        AlbumInfo albumInfo = BeanUtil.copyProperties(albumInfoVo, AlbumInfo.class);
        albumInfo.setIncludeTrackCount(0);
        // 默认审核通过
        albumInfo.setStatus(SystemConstant.ALBUM_STATUS_PASS);
        albumInfoMapper.insert(albumInfo);

        // 新增专辑属性表
        List<AlbumAttributeValueVo> albumAttributeValueVoList = albumInfoVo.getAlbumAttributeValueVoList();
        albumAttributeValueVoList.forEach(item -> {
            AlbumAttributeValue albumAttributeValue = new AlbumAttributeValue();
            albumAttributeValue.setAlbumId(albumInfo.getId());
            albumAttributeValue.setValueId(item.getValueId());
            albumAttributeValueMapper.insert(albumAttributeValue);
        });

        // 新增专辑统计表
        insertAlbumStat(albumInfo,SystemConstant.ALBUM_STAT_PLAY);
        insertAlbumStat(albumInfo,SystemConstant.ALBUM_STAT_SUBSCRIBE);
        insertAlbumStat(albumInfo,SystemConstant.ALBUM_STAT_BUY);
        insertAlbumStat(albumInfo,SystemConstant.ALBUM_STAT_COMMENT);
    }

    private void insertAlbumStat(AlbumInfo albumInfo, String type) {
        AlbumStat albumStat = new AlbumStat();
        albumStat.setAlbumId(albumInfo.getId());
        albumStat.setStatType(type);
        albumStat.setStatNum(0);
        albumStatMapper.insert(albumStat);
    }
}
